2 #ifndef FRAMELIB_MULTICHANNEL_H 3 #define FRAMELIB_MULTICHANNEL_H 25 typedef std::vector<Connection> MultiChannelOutput;
33 {
setIO(nIns, nOuts); }
47 virtual void setFixedInput(
unsigned long idx,
double *input,
unsigned long size) {};
52 virtual void reset(
double samplingRate,
unsigned long maxBlockSize) {}
62 void setIO(
unsigned long nIns,
unsigned long nOuts,
unsigned long nAudioChans = 0)
71 Connection
getInputChan(
unsigned long inIdx,
unsigned long chan);
85 void connectionUpdate(
Queue *queue)
87 if (!mDeleted && inputUpdate())
91 virtual bool inputUpdate() = 0;
92 void outputUpdate(
Queue *queue);
111 enum AtrributeList { kInputs };
122 virtual std::string
inputInfo(
unsigned long idx,
bool verbose);
123 virtual std::string
outputInfo(
unsigned long idx,
bool verbose);
135 virtual bool inputUpdate();
139 static ParameterInfo sParamInfo;
148 enum AtrributeList { kOutputs };
159 virtual std::string
inputInfo(
unsigned long idx,
bool verbose);
160 virtual std::string
outputInfo(
unsigned long idx,
bool verbose);
172 virtual bool inputUpdate();
176 static ParameterInfo sParamInfo;
193 mBlocks.push_back(
new T(context, serialisedParameters, owner));
194 mBlocks[0]->setChannel(0);
198 mSerialisedParameters.write(serialisedParameters);
208 for (
unsigned long i = 0; i <
getNumOuts(); i++)
227 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
233 virtual void setFixedInput(
unsigned long idx,
double *input,
unsigned long size)
235 if (idx < mFixedInputs.size())
237 mFixedInputs[idx].assign(input, input + size);
238 updateFixedInput(idx);
248 unsigned long internalNumIns = mBlocks[0]->getNumAudioIns();
249 unsigned long internalNumOuts = mBlocks[0]->getNumAudioOuts();
254 mAudioTemps[0] = alloc<double>(blockSize * internalNumOuts);
255 for (
unsigned long i = 1; i < internalNumOuts; i++)
256 mAudioTemps[i] = mAudioTemps[0] + (i * blockSize);
261 std::fill_n(outs[i], blockSize, 0.0);
265 for (
unsigned long i = 0; i < mBlocks.size(); i++)
267 unsigned long inStreamOffset = internalNumIns * (i % mNumAudioStreams);
268 unsigned long outStreamOffset = internalNumOuts * (i % mNumAudioStreams);
270 mBlocks[i]->blockUpdate(ins + inStreamOffset, &mAudioTemps[0], blockSize);
272 for (
unsigned long j = 0; j < internalNumOuts; j++)
273 for (
unsigned long k = 0; k <
blockSize; k++)
274 outs[outStreamOffset + j][k] += mAudioTemps[j][k];
287 virtual void reset(
double samplingRate,
unsigned long maxBlockSize)
289 mSamplingRate = samplingRate;
290 mMaxBlockSize = maxBlockSize;
292 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
293 (*it)->reset(samplingRate, maxBlockSize);
300 virtual std::string
objectInfo(
bool verbose) {
return mBlocks[0]->objectInfo(verbose); }
301 virtual std::string
inputInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->inputInfo(idx, verbose); }
302 virtual std::string
outputInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->outputInfo(idx, verbose); }
303 virtual std::string
audioInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->audioInfo(idx, verbose); }
312 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
313 (*it)->autoOrderingConnections();
318 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
319 (*it)->clearAutoOrderingConnections();
326 void updateFixedInput(
unsigned long idx)
328 for (
unsigned long i = 0; i < mBlocks.size(); i++)
329 mBlocks[i]->
setFixedInput(idx, &mFixedInputs[idx][0], mFixedInputs[idx].size());
334 virtual bool inputUpdate()
338 unsigned long nChannels = 1;
339 unsigned long cChannels = mBlocks.size();
341 for (
unsigned long i = 0; i <
getNumIns(); i++)
345 nChannels = std::max(nChannels, mNumAudioStreams);
349 bool numChansChanged = nChannels != cChannels;
355 if (nChannels > cChannels)
357 mBlocks.resize(nChannels);
359 for (
unsigned long i = cChannels; i < nChannels; i++)
362 mBlocks[i]->setChannel(i);
363 mBlocks[i]->reset(mSamplingRate, mMaxBlockSize);
368 for (
unsigned long i = nChannels; i < cChannels; i++)
371 mBlocks.resize(nChannels);
376 for (
unsigned long i = 0; i <
getNumOuts(); i++)
379 for (
unsigned long i = 0; i <
getNumOuts(); i++)
380 for (
unsigned long j = 0; j < nChannels; j++)
385 for (
unsigned long i = 0; i <
getNumIns(); i++)
391 for (
unsigned long i = 0; i <
getNumIns(); i++)
395 for (
unsigned long j = 0; j < nChannels; j++)
398 mBlocks[j]->addConnection(connection.
mObject, connection.
mIndex, i);
403 for (
unsigned long j = 0; j < nChannels; j++)
410 for (
unsigned long j = 0; j < nChannels; j++)
419 for (
unsigned long j = 0; j < nChannels; j++)
422 mBlocks[j]->addOrderingConnection(connection.
mObject, connection.
mIndex);
427 return numChansChanged;
434 std::vector <FrameLib_Block *> mBlocks;
435 std::vector <std::vector <double> > mFixedInputs;
437 unsigned long mNumAudioStreams;
438 unsigned long mMaxBlockSize;
439 double mSamplingRate;
441 std::vector<double *> mAudioTemps;
ObjectType
Definition: FrameLib_Types.h:24
virtual std::string objectInfo(bool verbose=false)
Definition: FrameLib_Object.h:160
void deleteConnection(unsigned long inIdx)
Definition: FrameLib_Object.h:200
Definition: FrameLib_Multichannel.h:109
unsigned long getNumOuts() const
Definition: FrameLib_Object.h:138
unsigned long getInputNumChans(unsigned long inIdx)
Definition: FrameLib_Multichannel.cpp:8
Definition: FrameLib_Parameters.h:21
virtual void reset(double samplingRate, unsigned long maxBlockSize)
Definition: FrameLib_Multichannel.h:287
void setIO(unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_Multichannel.h:62
Definition: FrameLib_Context.h:10
static bool handlesAudio()
Definition: FrameLib_Multichannel.h:54
static bool handlesAudio()
Definition: FrameLib_Multichannel.h:298
virtual FrameType inputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:164
Definition: FrameLib_Parameters.h:34
void dealloc(U *&ptr)
Definition: FrameLib_Object.h:340
virtual std::string outputInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:302
unsigned long getNumAudioChans() const
Definition: FrameLib_Object.h:141
virtual void clearAutoOrderingConnections()
Definition: FrameLib_Multichannel.h:168
virtual void autoOrderingConnections()
Definition: FrameLib_Multichannel.h:167
virtual std::string objectInfo(bool verbose)
Definition: FrameLib_Multichannel.h:300
virtual void blockUpdate(double **ins, double **outs, unsigned long blockSize)
Definition: FrameLib_Multichannel.h:51
virtual std::string outputInfo(unsigned long idx, bool verbose=false)
Definition: FrameLib_Object.h:162
unsigned long mIndex
Definition: FrameLib_Object.h:103
ObjectType getType() const
Definition: FrameLib_Object.h:125
virtual void autoOrderingConnections()
Definition: FrameLib_Multichannel.h:130
Definition: FrameLib_Object.h:91
void clearConnections()
Definition: FrameLib_Object.h:262
U * mObject
Definition: FrameLib_Object.h:102
FrameLib_Object::UntypedConnection< FrameLib_Block > Connection
Definition: FrameLib_Multichannel.h:20
virtual std::string audioInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:303
virtual void clearAutoOrderingConnections()
Definition: FrameLib_Multichannel.h:316
Definition: FrameLib_Multichannel.h:15
Definition: FrameLib_Object.h:97
void clearAllocator()
Definition: FrameLib_Object.h:346
virtual const FrameLib_Parameters * getParameters() const
Definition: FrameLib_Multichannel.h:308
virtual FrameType outputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:128
virtual std::string inputInfo(unsigned long idx, bool verbose=false)
Definition: FrameLib_Object.h:161
Connection getInputChan(unsigned long inIdx, unsigned long chan)
Definition: FrameLib_Multichannel.cpp:16
Definition: FrameLib_Multichannel.h:183
virtual void setFixedInput(unsigned long idx, double *input, unsigned long size)
Definition: FrameLib_Multichannel.h:233
FrameLib_Context getContext() const
Definition: FrameLib_Object.h:129
virtual void blockUpdate(double **ins, double **outs, unsigned long blockSize)
Definition: FrameLib_Multichannel.h:246
void clearOrderingConnections()
Definition: FrameLib_Object.h:254
FrameLib_Expand(FrameLib_Context context, FrameLib_Parameters::Serial *serialisedParameters, void *owner)
Definition: FrameLib_Multichannel.h:188
bool supportsOrderingConnections() const
Definition: FrameLib_Object.h:299
virtual FrameType inputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:127
virtual FrameType outputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:165
size_t blockSize(void *ptr)
Definition: FrameLib_Memory.cpp:23
Definition: FrameLib_Parameters.h:153
void enableOrderingConnections()
Definition: FrameLib_Object.h:331
virtual const FrameLib_Parameters * getParameters() const
Definition: FrameLib_Multichannel.h:125
unsigned long getOrderingConnectionNumChans(unsigned long idx)
Definition: FrameLib_Multichannel.cpp:21
FrameLib_MultiChannel(ObjectType type, FrameLib_Context context, void *owner)
Definition: FrameLib_Multichannel.h:35
virtual std::string inputInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:301
virtual ~FrameLib_MultiChannel()
Definition: FrameLib_Multichannel.h:39
Definition: FrameLib_Types.h:25
unsigned long getNumOrderingConnections() const
Definition: FrameLib_Object.h:300
void setIO(unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_Object.h:320
std::vector< MultiChannelOutput > mOutputs
Definition: FrameLib_Multichannel.h:98
virtual FrameType outputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:306
virtual void clearAutoOrderingConnections()
Definition: FrameLib_Multichannel.h:131
unsigned long getNumAudioOuts() const
Definition: FrameLib_Object.h:140
virtual FrameType inputType(unsigned long idx) const
Definition: FrameLib_Multichannel.h:305
Definition: FrameLib_Parameters.h:129
Connection getOrderingConnectionChan(unsigned long idx, unsigned long chan)
Definition: FrameLib_Multichannel.cpp:29
FrameType
Definition: FrameLib_Types.h:25
Definition: FrameLib_Multichannel.h:146
virtual void setFixedInput(unsigned long idx, double *input, unsigned long size)
Definition: FrameLib_Multichannel.h:47
virtual void autoOrderingConnections()
Definition: FrameLib_Multichannel.h:310
virtual void reset(double samplingRate, unsigned long maxBlockSize)
Definition: FrameLib_Multichannel.h:52
FrameLib_Queueable< FrameLib_MultiChannel >::Queue Queue
Definition: FrameLib_Object.h:115
unsigned long getNumIns() const
Definition: FrameLib_Object.h:137
FrameLib_MultiChannel(ObjectType type, FrameLib_Context context, void *owner, unsigned long nIns, unsigned long nOuts)
Definition: FrameLib_Multichannel.h:31
~FrameLib_Expand()
Definition: FrameLib_Multichannel.h:219
virtual const FrameLib_Parameters * getParameters() const
Definition: FrameLib_Multichannel.h:162
void * getOwner() const
Definition: FrameLib_Object.h:133